package main

// !(f)
// &(f,t)
// |(f,t)

//  栈
// 运算符后有一对括号
// 当前字符是逗号，则跳过；若是除了逗号和右括号，则入栈
// 右括号：依次弹出，计算结果-计算t,f个数；
func parseBoolExpr(expression string) bool {
	st := []rune{}
	for _, c := range expression {
		if c == ',' {
			continue
		}
		if c != ')' {
			st = append(st, c)
			continue
		}
		// else c==')
		t, f := 0, 0
		for st[len(st)-1] != '(' {
			val := st[len(st)-1]
			st = st[:len(st)-1] // 出栈
			if val == 't' {
				t++
			} else if val == 'f' {
				f++
			}
		}
		// 弹出左括号
		st = st[:len(st)-1]
		// 计算这个表达式结果
		op := st[len(st)-1]
		st = st[:len(st)-1]
		c = 't'
		switch op {
		case '!':
			if f != 1 {
				c = 'f'
			}
			st = append(st, c)
		case '&':
			if f != 0 {
				c = 'f'
			}
			st = append(st, c)
		case '|':
			if t == 0 {
				c = 'f'
			}
			st = append(st, c)
		}
	}
	return st[len(st)-1] == 't'
}
